package main

import (
	"fmt"
	"protobufDemo/pb"

	"google.golang.org/protobuf/proto"
)

func main() {
	// 定义一个Person结构体对象
	person := &pb.Person{
		Name:   "YanYeek",
		Age:    16,
		Emails: []string{"1@qq.com", "2@qq.com", "3@qq.com"},
		Phones: []*pb.PhoneNumber{
			{
				Number: "13111111111",
				Type:   pb.PhoneType_HOME,
			},
			{
				Number: "13111111112",
				Type:   pb.PhoneType_MOBILE,
			},
			{
				Number: "13111111113",
				Type:   pb.PhoneType_HOME,
			},
		},
	}

	// 编码
	// 将Person对象 就是将protobuf的message进行序列化，得到一个二进制文件
	data, err := proto.Marshal(person)
	// data就是我们要进行网络传输的数据，对端需要按照Message Person的格式进行解析
	if err != nil {
		fmt.Println("Marshal error: ", err)
		return
	}

	// 解码
	newPerson := &pb.Person{}
	err = proto.Unmarshal(data, newPerson)
	if err != nil {
		fmt.Println("Unmarshal error: ", err)
	}
	fmt.Println("源数据：", data)
	fmt.Println("解码后：", newPerson)
}
